// Copyright  2012 Petr TALLA. [petr.talla@gmail.com]
// This file is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This file is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY;  without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
// [http://www.gnu.org/copyleft/lesser.html]
//=============================================================================
#pragma once

class TcObserver;

#include <list>

//=============================================================================
class TcObject {
//=============================================================================
public:
//<CONSTRUCTION>
    TcObject();
    virtual ~TcObject();
//<METHODS>
    int id(void) { return id_; };
    void nameSet(const char* name);
//=============================================================================
protected:
//<ENUMS>
    enum EStatus { OS_NEW, OS_CHANGED, OS_UPTODATE };
//<DATA>
    int     id_;
    EStatus status_;
    std::list<TcObserver*> observers_;
//<CHANGED>
    void changed_();
//<FRIENDS>
    friend class TcObjectRegistry;
    friend class TcObserver;
};

